<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><meta name="baidu-site-verification" content="1EB8XoOl0C"><meta name="google-site-verification" content="K7thEgdLm0UfRWJ5MGdF7sCcjClSzAlxFLPv2Oz5CGM"><title> 游历八方评赏赞歌 · 小Blogs</title><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="游历八方评赏赞歌 - MiMonarchRD"><meta name="keywords"><meta name="author" content="MiMonarchRD"><link rel="short icon" href="/images/favicon.ico"><link rel="stylesheet" href="/css/bubuzou.css"><link rel="search" type="application/opensearchdescription+xml" href="http://yoursite.com/atom.xml" title="小Blogs"><script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src='//unpkg.com/valine/dist/Valine.min.js'></script>
<script data-ad-client="ca-pub-9236342367387381" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><meta name="generator" content="Hexo 4.2.1"><link rel="alternate" href="/atom.xml" title="小Blogs" type="application/atom+xml">
</head><body><header><div class="header row"> <a href="/" class="logo-link"><img src="/images/logo.png"></a><ul id="nav_list" class="nav nav-list"><li class="nav-list-item"><a href="/" target="_self" data-hover="博文" class="nav-list-link">博文</a></li><li class="nav-list-item"><a href="/archives/" target="_self" data-hover="归档" class="nav-list-link">归档</a></li></ul><div class="search"><a id="search_btn" href="#search"></a></div><div id="nav_btn" class="nav-btn"><span></span><span></span><span></span></div></div></header><div class="row scroll-con"><section class="container"><!-- for archive page--><div id="postAr" class="post"><article class="post-block"><h1 class="post-title">游历八方评赏赞歌</h1><div class="post-info">2019-10-04<p class="visit"><i data-identity="passages/231/" class="article-timer"></i><span>次访问</span></p></div><div class="post-content"><p>有幸体验了SE的大作《八方旅人》，一款典型的JRPG。</p>
<p><img src="https://www.xiaoblogs.cn/wp-content/uploads/2019/10/2018_07_18_aec8e5f0492247d78f49cdc3155c463e.jpeg" alt=""></p>
<p>本来奔着随笔形式去写，但JRPG的体验仅有口袋妖怪和塞尔达。其实说来也属游戏评测。</p>
<p>奥斯泰拉大陆上，有着八个性格迥异，背负着使命，怀揣着梦想的旅者。浪漫的旅者们各个武艺高强且有特殊能力，像是勾引诱惑别人和你一块走上“不归路”也有拿上权杖美其名曰“指引”别人和你踏上“不归之路”。8个人组成一个队伍倒是符合阵容搭配。</p>
<p>8位旅人，男子仿若“ 宗之潇洒美少年，举觞白眼望青天，皎如玉树临风前 ”。女子更是“ 千秋无绝色，悦目是佳人”。</p>
<p>神官、商人、药师、骑士、舞女、猎人、学者、盗贼</p>
<p>很丰富的设定，想体验什么人生故事都可以吧。 玩一些角色像读故事书。有的角色让你有使命感去保护，有的角色则是伤感惋惜最后的反转。</p>
<a id="more"></a>

<p>最喜欢商人（特蕾莎）的设定。活泼可爱元气满满的姑娘，总能让人联想到一天之初的朝阳。</p>
<p>场景交互方面这八个人可谓是“八仙过海，各显神通”。猎人骑士等可以和随便一个路人进行战斗，盗贼可以偷东西。偷东西有一个成功率嘛。有一次去特蕾莎（商人）家偷东西，发现成功率为0，不愧是大商人。这种小细节特别的有意思。舞女很美，可以勾引别人加入队伍（你懂得）</p>
<p><img src="https://www.xiaoblogs.cn/wp-content/uploads/2019/11/timg.jpg" alt=""></p>
<p>插画是真的好看呀，但是官方的仅仅只有很少的插画，同人倒是不少吧</p>
<p><img src="blob:https://www.xiaoblogs.cn/cbf17598-2655-4b15-8c59-e92f1ad84633" alt=""></p>
<p>整个游戏画面是8bit像素画的风格，通过一种摄影技巧“移轴镜摄影 ”将游戏变成了一个巨大的沙盘模型。</p>
<p>游戏里的多个城市也是不同。其中的雪城——弗雷姆格雷斯， 雪花覆盖在高台上，洁白无瑕，像是刚刚建成的碧玉台。雪花裹缠在树技上，晶莹闪烁，似刚刚栽植的美玉树</p>
<p>操作和游戏内的Boost和break的设定让你在战斗的时候也要考虑属性克制，如何合理用的BP点数。这些我就不过多说游戏内的玩法了，我接触的不多。不过效果和令人玩游戏的“爽感”可是有的，尤其是精打细算用BP对对面的BOSS进行了break，破甲后ding的声音是最好听的，让你还是有成就感的。</p>
<p>游戏的世界设定。别具一格，独出心裁。</p>
</div></article></div><div class="right-container"><div class="widget"><div id="arAnchorBar"></div></div></div></section></div><div class="right-menu"></div><div class="modal search-modal"><div class="input-field"><input type="text" id="search_input"><label for="search-input">搜索</label></div><div id="search_result" class="search-result"></div></div><div class="blog-overlay"></div><footer class="row"><div class="footer-con"><div class="paginator"><a href="/passages/e6-a0-91-e8-8e-93-e6-b4-be-e7-9a-84-e6-96-b0-e6-97-a7-e7-8e-a9-e6-b3-95-e6-90-ad-e5-bb-ba-e8-87-aa-e5-b7-b1-e7-9a-84-e4-b8-aa-e4-ba-ba-e5-8d-9a-e5-ae-a2-e5-9f-ba-e7-a1-80-e7-af-87/" title="树莓派的新(jiu)玩法-搭建自己的个人博客-基础篇" class="prev">PREV</a><a href="/passages/e6-a0-91-e8-8e-93-e6-b4-be-e7-9a-84-e5-8f-88-e4-b8-80-e6-ac-a1-e6-8a-98-e8-85-be-e6-90-ad-e5-bb-ba-e5-ae-b6-e7-94-a8nas/" title="树莓派的又一次折腾-搭建家用NAS" class="next">NEXT</a></div><a href="#comment" class="comment-anchor"></a><div id="vcomments"></div><script>new Valine({
    el: "#vcomments",
    appId: "16RIoAUdMwdJKhah8eqwpG8e-gzGzoHsz",
    appKey: "rjY2FM4qe5PGNokVnDjN7TVk",
    notify: false,
    verify: false,
    avatar: "robohash",
    visitor: true,
    placeholder: "随便说点什么～.～",
});</script><div class="copyright"><p>© 2020 <a target="_blank">MiMonarchRD</a>, powered by <a href="https://hexo.io/" target="_blank">Hexo</a> <br> and <a href="https://github.com/Bulandent/hexo-theme-bubuzou" target="_blank">hexo-theme-bubuzou</a></p><p> </p></div><div class="totop"><i></i></div></div></footer><script async src="//cdn.bootcss.com/mathjax/2.6.1/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/scripts/jquery-1.8.2.min.js"></script><script src="/scripts/ar-anchor.js"></script><script src="/scripts/main.js"></script><script>(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;e=o.createElement(i);r=o.getElementsByTagName(i)[0];e.src='//www.google-analytics.com/analytics.js';r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));ga('create',"UA-65933410-1",'auto');ga('send','pageview');</script><script>const valineAPI = (() => {
try {
    AV.init("16RIoAUdMwdJKhah8eqwpG8e-gzGzoHsz", "rjY2FM4qe5PGNokVnDjN7TVk");
} catch(error) {}
const isExist = (identity) => {
    identity = identity || getRealPath();
    let query = new AV.Query('Timer');
    return new Promise((resolve, reject) => {
    query.equalTo("identity", identity);
    query.find().then(results => {
        resolve(results.length > 0);
    }, error => reject(error));
    })
}

const _get = (identity) => {
    let query = null;
    if(identity && identity instanceof Array){
    let querys = [];
    for(let i = 0; i < identity.length; ++i) {
        querys[i] = new AV.Query('Timer');
        querys[i].equalTo('identity', identity[i]);
    }
    query = AV.Query.or.apply(null ,querys);
    } else {
    identity = identity || getRealPath();
    query = new AV.Query("Timer");
    query.equalTo("identity", identity);
    }

    return new Promise((resolve, reject) => {
    query.find()
    .then(results => resolve(results))
    .catch(error => reject(error))
    })
}

const create = (identity) => {
    identity = identity || getRealPath();
    return new Promise((resolve, reject) => {
    let Todo = AV.Object.extend('Timer');
    let todo = new Todo();
    todo.set("times", 1);
    todo.set("identity", identity);
    todo.save().then(res => resolve(true), error => reject(error));
    })
}

const update = (identity) => {
    identity = identity || getRealPath();
    return new Promise((resolve, reject) => {
    let query = new AV.Query('Timer');
    query.equalTo("identity", identity);
    query.find().then(todos => {
        todos.forEach(todo => {
        todo.set("times", todo.attributes.times + 1);
        });
        return AV.Object.saveAll(todos);
    }).then(todos => resolve(true), error => reject(error));
    })
}

return {
    isExist,
    _get,
    update,
    create
}
})()

const calcAndWriteTimes = () => {
let isPost = true;

let timerAllDOM = document.querySelectorAll(".article-timer");

if(isPost) {
    let identity = timerAllDOM[0].getAttribute("data-identity");
    valineAPI.isExist(identity)
    .then(exist => {
    if(exist) {
        return valineAPI.update(identity);
    }
    return new Promise(resolve => resolve(true));
    })
    .then( succuess => valineAPI._get(identity))
    .then( result => timerAllDOM[0].innerText = result[0].attributes.times)
    .catch(error => console.log(error.message))
    return ;
}

let timerDOMCache = {};

for(let timerDOM of timerAllDOM) {
    let identity = timerDOM.getAttribute("data-identity");
    if(timerDOMCache.hasOwnProperty(identity)){
    timerDOMCache[identity].dom.push(timerDOM);
    }else{
    timerDOMCache[identity] = {
        dom: [timerDOM],
        times: undefined
    };
    }
}

let identities = Object.keys(timerDOMCache);
valineAPI._get(identities).then(results => {
    for(let result of results) {
    let {identity, times} = result.attributes;
    timerDOMCache[identity].times = times;
    timerDOMCache[identity].dom.map(item => item.innerText = times);
    }
    for(let identity of identities) {
    if(timerDOMCache[identity].times){
        continue;
    }
    timerDOMCache[identity].dom.map(item => item.innerText = 1);
    valineAPI.create(identity);
    }
}).catch(error => console.log(error.message))
}

if(true){
calcAndWriteTimes();
}</script></body></html>